/*
 * Copyright (c) 2011, Janni Kovacs
 * All rights reserved.
 *
 * Redistribution and use of this software in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 * - Redistributions of source code must retain the above
 *   copyright notice, this list of conditions and the
 *   following disclaimer.
 *
 * - Redistributions in binary form must reproduce the above
 *   copyright notice, this list of conditions and the
 *   following disclaimer in the documentation and/or other
 *   materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

package de.umass.lastfm2itunes.core;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import javax.script.ScriptException;

import de.umass.lastfm.*;
import org.xml.sax.SAXException;

public class Lastfm2itunes {

	private ITunesConnector itunes;
	private Feedback feedback;
	private String user;
	private Properties properties;
	private boolean stopped = false;

	public Lastfm2itunes(Feedback feedback, Properties p) {
		itunes = new ITunesConnector();
		this.feedback = feedback;
		this.properties = p;
	}

	public void setUser(String user) {
		this.user = user;
		// loader = new WeeklyChartLoader(user);
	}

	public void resetPlayCounts() throws ScriptException {
		itunes.resetAllPlayCounts();
	}

	public void lastfm2itunes() throws SAXException, IOException {
		int page = 1, total;
		String key = properties.getProperty("api.key");
		do {
			PaginatedResult<Track> result = Library.getTracks(user, page, 50, key);
			total = result.getTotalPages();
			feedback.processing("Processing page " + page + " of " + total);
			List<ITrack> queries = new ArrayList<ITrack>(50);
			for (Track t : result.getPageResults()) {
//				System.out.println(t.getArtist() + " - "+ t.getName() +": "+ t.getPlaycount());
				queries.add(new ITrack(t.getArtist(), t.getName(), t.getPlaycount()));
			}
//			long time = System.currentTimeMillis();
			itunes.setPlayCounts(queries);
//			time = System.currentTimeMillis() - time;
			// System.out.println("time: "+ time+"ms");
			page++;
		} while (page <= total && !stopped);
	}

	public void stop() {
		this.stopped = true;
	}
}
